package internal

import (
	"context"
	"fmt"
	justweb "justweb/pkg"
	"time"
)

func Hello(c *justweb.Context) {
	c.OkJson("hello world")
}

func Hello2(c *justweb.Context) {
	fmt.Println(c.PathParams)
	c.OkJson("hello world2 this :param")
}

func Hello3(c *justweb.Context) {
	fmt.Println(c.URLPath)
	c.OkJson("hello world 3  this is :regx([1,9]+)")
}

func Hello4(c *justweb.Context) {

	pool := justweb.NewGPool(10)

	// 创建超时任务
	task := justweb.NewTask(func(context.Context) {
		time.Sleep(5 * time.Second)
	}, 1*time.Second)

	err := pool.Schedule(task)
	if nil != err {
		println(err)
		c.OkJson("任务提交失败")
		return
	}

	err = <-task.Error // 等待闭包执行完, 将ctx.Done()的属性赋值给task.Done
	if nil != err {
		c.OkJson("任务打包失败")
		task.Cancel()
		return
	}
	<-task.Done      // 等待任务执行完完毕
	task.Delay(task) // 执行闭包函数，这里拿到封装闭包时候环境里的Error——也就是ctx.Err()
	if err = <-task.Error; err != nil {
		c.OkJson("任务超时")
		return
	}

	c.OkJson("hello world")
}
